Ik heb een tijdje met JSON gerommeld, het gewoon als tekst naar buiten gedrukt en het heeft niemand pijn gedaan (voor zover ik weet), maar ik zou graag dingen goed willen doen. Ik heb zoveel vermeende "standaarden" gezien voor het JSON-inhoudstype: applicatie / json applicatie / x-javascript tekst / javascript text / x-javascript text / x-json Maar welke is correct of de beste? Ik begrijp dat er beveiligings- en browserondersteuningsproblemen zijn die tussen beide verschillen. Ik weet dat er een vergelijkbare vraag is: welk MIME-type als JSON wordt geretourneerd door een REST API?, Maar ik zou graag een iets gerichter antwoord willen.
2020-12-07 21:15:53
1 2 De volgende Voor JSON-tekst: applicatie / json Het MIME-mediatype voor JSON-tekst is application / json. De standaardcodering is UTF-8. (Bron: RFC 4627). Voor JSONP (uitvoerbaar JavaScript) met callback: applicatie / javascript Hier zijn enkele blogberichten die werden genoemd in de relevante opmerkingen: Waarom u geen tekst / html voor JSON zou moeten gebruiken Internet Explorer heeft soms problemen met application / json Een vrij complete lijst met Mimetypes en waarvoor ze moeten worden gebruikt De officiële lijst met mime-typen bij IANA uit het antwoord van @ gnrfan hieronder | IANA heeft het officiële MIME-type voor JSON geregistreerd als application / json. Toen hem werd gevraagd waarom niet text / json, lijkt Crockford te hebben gezegd dat JSON niet echt JavaScript of tekst is en dat IANA ook eerder applicatie / * uitdeelde dan tekst / *. Meer middelen: Mediatypen Verzoek om commentaar 4627 bluesmoon: JSON heeft een type | Voor JSON: Inhoudstype: application / json Voor JSON-P: Inhoudstype: applicatie / javascript | Het juiste MIME-mediatype voor JSON is natuurlijk application / json, maar het is noodzakelijk om te beseffen welk type gegevens wordt verwacht in uw applicatie. Ik gebruik bijvoorbeeld Ext GWT en de serverreactie moet als tekst / html gaan maar bevat JSON-gegevens. Clientzijde, Ext GWT formulier listener uploadForm.getForm (). addListener (nieuwe FormListenerAdapter () { @Override public void onActionFailed (Formulier, int httpStatus, String responseText) { MessageBox.alert ("Fout"); } @Override public void onActionComplete (Formulier, int httpStatus, String responseText) { MessageBox.alert ("Succes"); } }); Als ik het applicatietype / json-antwoordtype gebruik, stelt de browser me voor om het bestand op te slaan. Broncodefragment aan serverzijde met behulp van Spring MVC retourneer nieuwe AbstractUrlBasedView () { @SuppressWarnings ("niet gecontroleerd") @Override beschermde ongeldige renderMergedOutputModel (kaartmodel, HttpServletRequest-verzoek, HttpServletResponse response) genereert uitzondering { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: De respons bestaat uit dynamisch gegenereerde gegevens, volgens de queryparameters die in de URL zijn doorgegeven. Voorbeeld: {"Name": "Foo", "Id": 1234, "Rank": 7} Inhoudstype: application / json JSON-P: JSON met opvulling. Reactie is JSON-gegevens, met een functieaanroep eromheen. Voorbeeld: functionCall ({"Naam": "Foo", "Id": 1234, "Rang": 7}); Inhoudstype: applicatie / javascript | Als u Ubuntu of Debian gebruikt en .json-bestanden aanbiedt via Apache, wilt u misschien de bestanden met het juiste inhoudstype serveren. Ik doe dit voornamelijk omdat ik de Firefox-extensie JSONView wil gebruiken De Apache-module mod_mime helpt om dit gemakkelijk te doen. Bij Ubuntu moet u echter het bestand /etc/mime.types bewerken en de regel toevoegen applicatie / json json Start Apache opnieuw: sudo service apache2 herstart | Als u ASP.NET Web Services aanroept vanaf de client, moet u application / json gebruiken om het te laten werken. Ik geloof dat dit hetzelfde is voor de jQuery- en Ext-frameworks. | Het juiste inhoudstype voor JSON is application / json TENZIJ je JSONP gebruikt, ook wel bekend als JSON met Padding, wat eigenlijk JavaScript is en dus het juiste inhoudstype application / javascript is. | Het lijdt geen twijfel dat application / json het beste MIME-type is voor een JSON-antwoord. Maar ik had enige ervaring waarbij ik application / x-javascript moest gebruiken vanwege enkele compressieproblemen. Mijn hostingomgeving is shared hosting met GoDaddy. Ze staan me niet toe om serverconfiguraties te wijzigen. Ik had de volgende code aan mijn web.config-bestand toegevoegd om reacties te comprimeren.Door dit te gebruiken, werden de .aspx-pagina's gecomprimeerd met g-zip, maar JSON-reacties niet. ik voegde toe in de statische en dynamische typen secties. Maar dit comprimeert JSON-reacties helemaal niet. Daarna heb ik dit nieuw toegevoegde type verwijderd en toegevoegd in zowel de statische als de dynamische typen secties, en veranderde het antwoordtype in .ashx (asynchrone handler) naar applicatie / x-javascript En nu ontdekte ik dat mijn JSON-antwoorden waren gecomprimeerd met g-zip. Dus ik raad persoonlijk aan om te gebruiken applicatie / x-javascript alleen als u uw JSON-antwoorden op een gedeelde hostingomgeving wilt comprimeren. Omdat ze bij shared hosting niet toestaan dat u IIS wijzigtconfiguraties. | Alleen wanneer ik application / json als het MIME-type gebruik, heb ik het volgende (vanaf november 2011 met de meest recente versies van Chrome, Firefox met Firebug): Geen waarschuwingen meer van Chrome wanneer de JSON wordt geladen vanaf de server. Firebug voegt een tabblad toe aan het antwoord met de JSON-gegevens geformatteerd. Als het MIME-type anders is, wordt het weergegeven als 'Reactie-inhoud'. | Niet alles werkt voor het inhoudstype application / json. Als u Ext JS-formulier verzendt om een bestand te uploaden, moet u er rekening mee houden dat de serverreactie door de browser wordt geparseerd om het document voor het